home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue30 / crossref / DbCrCode / DbCrossF.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-11-19  |  6.6 KB  |  225 lines

  1. unit DbCrossF;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   Db, DBTables, StdCtrls;
  8.  
  9. type
  10.   TDbCrossForm = class(TForm)
  11.     TableCustomers: TTable;
  12.     TableOrders: TTable;
  13.     TableItems: TTable;
  14.     BtnGenerate: TButton;
  15.     DataSource1: TDataSource;
  16.     TableCustomersCustNo: TFloatField;
  17.     TableCustomersCompany: TStringField;
  18.     TableCustomersAddr1: TStringField;
  19.     TableCustomersAddr2: TStringField;
  20.     TableCustomersCity: TStringField;
  21.     TableCustomersState: TStringField;
  22.     TableCustomersZip: TStringField;
  23.     TableCustomersCountry: TStringField;
  24.     TableCustomersPhone: TStringField;
  25.     TableCustomersFAX: TStringField;
  26.     TableCustomersTaxRate: TFloatField;
  27.     TableCustomersContact: TStringField;
  28.     TableCustomersLastInvoiceDate: TDateTimeField;
  29.     DataSource2: TDataSource;
  30.     TableOrdersOrderNo: TFloatField;
  31.     TableOrdersCustNo: TFloatField;
  32.     TableOrdersSaleDate: TDateTimeField;
  33.     TableOrdersShipDate: TDateTimeField;
  34.     TableOrdersEmpNo: TIntegerField;
  35.     TableOrdersShipToContact: TStringField;
  36.     TableOrdersShipToAddr1: TStringField;
  37.     TableOrdersShipToAddr2: TStringField;
  38.     TableOrdersShipToCity: TStringField;
  39.     TableOrdersShipToState: TStringField;
  40.     TableOrdersShipToZip: TStringField;
  41.     TableOrdersShipToCountry: TStringField;
  42.     TableOrdersShipToPhone: TStringField;
  43.     TableOrdersShipVIA: TStringField;
  44.     TableOrdersPO: TStringField;
  45.     TableOrdersTerms: TStringField;
  46.     TableOrdersPaymentMethod: TStringField;
  47.     TableOrdersItemsTotal: TCurrencyField;
  48.     TableOrdersTaxRate: TFloatField;
  49.     TableOrdersFreight: TCurrencyField;
  50.     TableOrdersAmountPaid: TCurrencyField;
  51.     TableItemsOrderNo: TFloatField;
  52.     TableItemsItemNo: TFloatField;
  53.     TableItemsPartNo: TFloatField;
  54.     TableItemsQty: TIntegerField;
  55.     TableItemsDiscount: TFloatField;
  56.     EditPath: TEdit;
  57.     Label1: TLabel;
  58.     TableParts: TTable;
  59.     TableItemsPart: TStringField;
  60.     TablePartsPartNo: TFloatField;
  61.     TablePartsVendorNo: TFloatField;
  62.     TablePartsDescription: TStringField;
  63.     TablePartsOnHand: TFloatField;
  64.     TablePartsOnOrder: TFloatField;
  65.     TablePartsCost: TCurrencyField;
  66.     TablePartsListPrice: TCurrencyField;
  67.     ButtonMain: TButton;
  68.     ButtonCross: TButton;
  69.     procedure BtnGenerateClick(Sender: TObject);
  70.     procedure ButtonMainClick(Sender: TObject);
  71.     procedure ButtonCrossClick(Sender: TObject);
  72.   end;
  73.  
  74. var
  75.   DbCrossForm: TDbCrossForm;
  76.  
  77. implementation
  78.  
  79. {$R *.DFM}
  80.  
  81. uses
  82.   Shellapi, HtmlData;
  83.  
  84. procedure TDbCrossForm.BtnGenerateClick(Sender: TObject);
  85. var
  86.   HtmlCust, HtmlOrd, HtmlItem, HtmlParts: THtmlData;
  87.   HtmlMem: THtmlStrings;
  88.   ListOfLists: TStringList;
  89.   Index: Integer;
  90. begin
  91.   // initialize
  92.   Screen.Cursor := crHourglass;
  93.  
  94.   // create the string lists
  95.   HtmlCust := THtmlData.Create (TableCustomers);
  96.   HtmlOrd := THtmlData.Create (TableOrders);
  97.   HtmlItem := THtmlData.Create (TableItems);
  98.   HtmlParts := THtmlData.Create (TableParts);
  99.   ListOfLists := TStringList.Create;
  100.  
  101.   try
  102.     // the main file (customers)
  103.     HtmlCust.AddHeader ('All the Customers');
  104.  
  105.     // for each customer
  106.     TableCustomers.First;
  107.     while not TableCustomers.EOF do
  108.     begin
  109.       // add a row to the html customers table
  110.       HtmlCust.AddTableRow ('Cust');
  111.  
  112.       // orders for each customer
  113.       HtmlOrd.AddHeader (
  114.         TableCustomersCompany.AsString +
  115.         ' Orders');
  116.  
  117.       // for each order
  118.       TableOrders.First;
  119.       while not TableOrders.EOF do
  120.       begin
  121.         // add the data of the current order
  122.         HtmlOrd.AddTableRow ('Ord');
  123.  
  124.         // items of each order
  125.         HtmlItem.AddHeader (
  126.           TableCustomersCompany.AsString + ' Order No. ' +
  127.           TableOrders.FieldByName('OrderNo').AsString);
  128.  
  129.         while not TableItems.EOF do
  130.         begin
  131.           // add the data of the current item
  132.           HtmlItem.AddTableRow ('');
  133.  
  134.           // search the part in the cross reference
  135.           Index := ListOfLists.IndexOf (
  136.             TableItemsPartNo.AsString);
  137.           // if not found create a new entry
  138.           if Index < 0 then
  139.           begin
  140.             HtmlMem := THtmlStrings.Create;
  141.             HtmlMem.AddHeader ('Part: ' +
  142.               TableItemsPart.AsString);
  143.             Index := ListOfLists.AddObject (
  144.               TableItemsPartNo.AsString, HtmlMem);
  145.           end;
  146.           // add the reference to the list
  147.           THtmlStrings (ListOfLists.Objects[Index]).
  148.             Add ('<a href="Ord' +
  149.               TableItemsOrderNo.AsString + '.htm">' +
  150.               TableCustomersCompany.AsString +
  151.               ' Order No. ' +
  152.               TableOrders.FieldByName('OrderNo').AsString +
  153.               '</a><p>');
  154.           TableItems.Next;
  155.         end;
  156.  
  157.         // save the html file with the items of the order
  158.         HtmlItem.AddFooter;
  159.         HtmlItem.SaveToFile (EditPath.Text + 'Ord' +
  160.           TableOrders.FieldByName('OrderNo').AsString +
  161.           '.htm');
  162.         TableOrders.Next;
  163.       end;
  164.       // save the html file with the orders of the customer
  165.       HtmlOrd.AddFooter;
  166.       HtmlOrd.SaveToFile (EditPath.Text + 'Cust' +
  167.         TableCustomersCustNo.AsString + '.htm');
  168.       TableCustomers.Next;
  169.     end;
  170.  
  171.     HtmlCust.AddFooter;
  172.     HtmlCust.SaveToFile (EditPath.Text + 'main.htm');
  173.  
  174.     // output the cross reference files
  175.     for Index := 0 to ListOfLists.Count - 1 do
  176.     begin
  177.       HtmlMem := THtmlStrings (ListOfLists.Objects[Index]);
  178.       HtmlMem.AddFooter;
  179.       HtmlMem.SaveToFile (EditPath.Text + 'Itx' +
  180.         ListOfLists [Index] + '.htm');
  181.       HtmlMem.Free;
  182.     end;
  183.  
  184.     // generate the index of the cross reference
  185.     HtmlParts.AddHeader ('Parts Cross Reference');
  186.     TableParts.First;
  187.     while not TableParts.EOF do
  188.     begin
  189.       // add a row to the html customers table
  190.       HtmlParts.AddTableRow ('Itx');
  191.       TableParts.Next;
  192.     end;
  193.     HtmlParts.AddFooter;
  194.     HtmlParts.SaveToFile (EditPath.Text +
  195.       'Parts.htm');
  196.  
  197.   finally
  198.     HtmlCust.Free;
  199.     HtmlOrd.Free;
  200.     HtmlItem.Free;
  201.     HtmlParts.Free;
  202.     ListOfLists.Free;
  203.     Beep;
  204.     Screen.Cursor := crDefault;
  205.   end;
  206. end;
  207.  
  208. procedure TDbCrossForm.ButtonMainClick(Sender: TObject);
  209. begin
  210.   // open the main file with the default browser
  211.   ShellExecute (Handle, 'open',
  212.     pChar (EditPath.Text + 'main.htm'),
  213.     '', '', sw_ShowNormal);
  214. end;
  215.  
  216. procedure TDbCrossForm.ButtonCrossClick(Sender: TObject);
  217. begin
  218.   // open the main file with the default browser
  219.   ShellExecute (Handle, 'open',
  220.     pChar (EditPath.Text + 'parts.htm'),
  221.     '', '', sw_ShowNormal);
  222. end;
  223.  
  224. end.
  225.